#ifndef NAVIGATIONEDGELIST_H_
#define NAVIGATIONEDGELIST_H_

#include "List.h"
#include "Vector2D.h"

class NavigationEdge;
class NavigationEdgeList
{
	int length;
	public:
	List<NavigationEdge> * head;
	
	public:
	NavigationEdgeList();
	NavigationEdgeList(NavigationEdge * headNavigationEdge);
	~NavigationEdgeList();
	List<NavigationEdge> * Add(NavigationEdge * payload);
	void Remove(NavigationEdge * point);
	NavigationEdge * GetCurrentEdge(Vector2D position, float radius, NavigationEdge * desired);
	NavigationEdge * Pop();
	void ConnectEdge(NavigationEdge * edge);
	static NavigationEdgeList * BuildGraph(NavigationEdgeList * edges);
	bool IsEmpty();
	NavigationEdge * PriorityPop();
	bool Contains(NavigationEdge * edge);
	void Merge(NavigationEdgeList * list);
	void Clear();
	int GetLength();
	void RunFunction(void (NavigationEdge::*func)());
};
#endif /*NAVIGATIONEDGELIST_H_*/
